package com.example.clienteclinica1;

import java.io.IOException;
import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import com.nicolascarrascob.clientesoap.AddPeliculaActivity;
import com.nicolascarrascob.clientesoap.MainActivity;
import com.nicolascarrascob.clientesoap.Pelicula;
import com.nicolascarrascob.clientesoap.PeliculasAdapter;
import com.nicolascarrascob.clientesoap.R;
import com.nicolascarrascob.clientesoap.UpdatePeliculaActivity;
import com.nicolascarrascob.clientesoap.MainActivity.ObtenerCarteleraBackground;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewDebug.IntToString;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

/**
 * @author Pablo
 * 
 */
public class Main extends ListActivity {

	/**
	 * 
	 */
	private TextView txtResultadoServicio;

	ArrayList<Paciente> pacientes;

	/**
	 * 
	 */
	private String URL = GestionIp.HOST
			+ "/ServicioWebClinica/services/FichaPacienteORMWS";
	private String NAMESPACE = "http://ws";

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		pacientes = new ArrayList<Paciente>();
		setListAdapter(new PacienteAdapter(Main.this, 0, pacientes));
	}

	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		// TODO Auto-generated method stub
		Intent intent = new Intent(Main.this, UpdatePaciente.class);
		intent.putExtra("pelicula", pacientes.get(position));
		startActivity(intent);
	}

	public void obtenerPaciente(View v) {
		txtResultadoServicio.setText("");
		Log.d("", URL);
		new obtenerPacienteBackground().execute();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.add_pelicula:
			Intent intent = new Intent(Main.this, AddPaciente.class);
			startActivity(intent);
			return true;
		default:
			return true;
		}
	}

	class obtenerPacienteBackground extends AsyncTask<Void, Void, String> {

		private ProgressDialog progressDialog;

		@Override
		protected void onPreExecute() {
			progressDialog = ProgressDialog.show(Main.this, "Clinica del Sur",
					"Espere mientras se carga la lista de pacientes...", true);
			super.onPreExecute();
		}

		@Override
		protected String doInBackground(Void... params) {

			String resultadoJSON = "";
			String METHOD_NAME = "getPaciente";
			String SOAP_ACTION = NAMESPACE + "/" + METHOD_NAME;
			SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
			SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
					SoapEnvelope.VER11);
			soapEnvelope.dotNet = true;
			soapEnvelope.implicitTypes = true;
			soapEnvelope.setOutputSoapObject(request);

			HttpTransportSE aht = new HttpTransportSE(URL);
			Log.d("Cliente SOAP", "Iniciando Consulta");
			try {
				aht.call(SOAP_ACTION, soapEnvelope);
				SoapPrimitive resultString = (SoapPrimitive) soapEnvelope
						.getResponse();
				resultadoJSON = resultString.toString();
				Log.d("Cliente SOAP", "Finalizando Consulta");

			} catch (IOException e) {
				e.printStackTrace();
			} catch (XmlPullParserException e) {
				e.printStackTrace();
			}

			return resultadoJSON;
		}

		@Override
		protected void onPostExecute(String result) {
			super.onPostExecute(result);
			progressDialog.dismiss();
			if ("".equals(result)) {
				Toast.makeText(Main.this,
						"Error al obtener la informacion necesaria",
						Toast.LENGTH_LONG).show();
			} else {
				try {
					pacientes = new ArrayList<Paciente>();
					String texto = "";
					Log.d("", result);
					JSONObject resultado = new JSONObject(result);
					texto += resultado.getString("Titulo") + "\n";
					String contenido = resultado.getString("Contenido");
					Log.d("ClienteSoap", contenido);
					JSONArray pacientesJSONArray = new JSONArray(contenido);
					int cantPacientes = pacientesJSONArray.length();
					for (int i = 0; i < cantPacientes; i++) {
						Paciente paciente = new Paciente();
						texto += pacientesJSONArray.getJSONObject(i).getString(
								"id")
								+ "\n";
						paciente.setId(pacientesJSONArray.getJSONObject(i)
								.getInt("Id"));
						texto += pacientesJSONArray.getJSONObject(i).getString(
								"id")
								+ "\n";
						paciente.setNombre(pacientesJSONArray.getJSONObject(i)
								.getString("nombre"));
						texto += pacientesJSONArray.getJSONObject(i).getString(
								"nombre")
								+ "\n";
						paciente.setDireccion(pacientesJSONArray.getJSONObject(
								i).getString("direccion"));
						texto += pacientesJSONArray.getJSONObject(i).getString(
								"direccion")
								+ "\n";

						pacientes.add(paciente);
					}
					setListAdapter(new PacienteAdapter(Main.this, 0, pacientes));
				} catch (JSONException e) {
					Toast.makeText(Main.this,
							"Error al obtener la lista de pacientes",
							Toast.LENGTH_LONG).show();
				}
			}
		}
	}

}
